From: Ian Campbell Date: Thu, 19 Aug 2010 14:31:46 +0000 (+0100) Subject: libxl/xl: use libxl_diskinfo_destroy and libxl_device_disk_destroy X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11597 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=59b473787670273e77a1df62fa106b53a133826a;p=xen.git libxl/xl: use libxl_diskinfo_destroy and libxl_device_disk_destroy [PATCH 13 of 16 of libxl: autogenerate type definitions and destructor functions] Signed-off-by: Ian Campbell Signed-off-by: Ian Jackson --- diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 7cb541b47f..a1185ee7b2 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -1355,8 +1355,8 @@ static char ** libxl_build_device_model_args_new(libxl_gc *gc, flexarray_set(dm_args, num++, libxl_sprintf(gc, "-%s", disks[i].virtpath)); flexarray_set(dm_args, num++, disks[i].physpath); } + libxl_device_disk_destroy(&disks[i]); } - /* FIXME: leaks disk paths */ free(disks); flexarray_set(dm_args, num++, NULL); return (char **) flexarray_contents(dm_args); @@ -2562,6 +2562,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk) int num, i; uint32_t stubdomid; libxl_device_disk *disks; + int ret = ERROR_FAIL; if (!disk->physpath) { disk->physpath = ""; @@ -2575,9 +2576,11 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk) } if (i == num) { XL_LOG(ctx, XL_LOG_ERROR, "Virtual device not found"); - free(disks); - return ERROR_FAIL; + goto out; } + + ret = 0; + libxl_device_disk_del(ctx, disks + i, 1); libxl_device_disk_add(ctx, domid, disk); stubdomid = libxl_get_stubdom_id(ctx, domid); @@ -2588,9 +2591,11 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk) libxl_device_disk_add(ctx, stubdomid, disk); disk->domid = domid; } - /* FIXME: leaks disk paths */ +out: + for (i = 0; i < num; i++) + libxl_device_disk_destroy(&disks[i]); free(disks); - return 0; + return ret; } /******************************************************************************/ diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 6f5f6c8e8b..b3f533de70 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -4261,7 +4261,7 @@ int main_blockattach(int argc, char **argv) int main_blocklist(int argc, char **argv) { int opt; - int nb; + int i, nb; libxl_device_disk *disks; libxl_diskinfo diskinfo; @@ -4291,14 +4291,17 @@ int main_blocklist(int argc, char **argv) if (!disks) { continue; } - for (; nb > 0; --nb, ++disks) { - if (!libxl_device_disk_getinfo(&ctx, domid, disks, &diskinfo)) { + for (i=0; i